#include<iostream>
using namespace std;
#include<vector>
/*
暴力解法，两层for循环，一层遍历数组，一层更新数组
一旦有等于val，将整个数组val+1位后面的全部向前移动一位。
*/
class Solution1 {
public:
    int removeElement(vector<int>& nums, int val) {
        int size = nums.size();
        for(int i = 0;i < size; i++)//遍历数组
        {
            if(nums[i] == val)//满足val条件
            {
                for(int j = i + 1;j < size; j++)//位后面的全部向前移动一位
                {
                    nums[j-1] = nums[j];
                }
                i--;
                size--;
            }
        }
        return size;
    }
};
/*
双指针法，数值的索引相当于指针。
*/
class Solution2 {
public:
    int removeElement(vector<int>& nums, int val) {
        int size = nums.size();
    int slowindex;
    for(int fastindex = 0;fastindex<size;fastindex++)//一层指针遍历
    {
        if(nums[fastindex]!=val)
        {
            nums[slowindex++] = nums[fastindex];
        }
    }
    return slowindex;
    }
};
int main()
{
    vector<int> test_nums = {1,1,2,2,2,5};
    Solution1 test1;
    int len1,len2;
    // len1 = test1.removeElement(test_nums,2);
    // cout<<"len1 = "<<len1<<endl;

    Solution2 test2;
    len2 = test2.removeElement(test_nums,2);
    cout<<"len2 = "<<len2<<endl;
}